package 栈;

import java.util.Deque;
import java.util.LinkedList;

/**
 * @author: TTDB
 * @create: 2025/9/22
 * @description:
 * 使用 Java 内置的 Stack 类（较旧的方式）----不推荐，因为这是同步
 * 使用 Deque 接口和 ArrayDeque 实现（推荐方式）
 * 自定义栈实现
 * Push - 将输入框中的值推入栈中
 *
 * Pop - 从栈顶弹出一个值
 *
 * Peek - 查看栈顶元素而不弹出
 *
 * Clear - 清空栈
 */
public class isValid {
    public boolean isValid(String s) {
        // 创建一个栈，左括号入栈，右括号出栈
//        Stack<Character> st = new Stack<>();---不推荐
//        Deque<Character> st = new ArrayDeque<>();----数组作栈
        Deque<Character> st = new LinkedList<>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == '(' || c == '[' || c == '{') {
                st.push(c);
            } else {
                if (st.isEmpty()) {
                    return false;
                }
                char top = st.pop();
                if (c == ')' && top != '(') {
                    return false;
                }
                if (c == ']' && top != '[') {
                    return false;
                }
                if (c == '}' && top != '{') {
                    return false;
                }
            }
        }
        return st.isEmpty();
    }
}
